#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0;bool f=0;char ch=getchar();
	while(ch<'0'||ch>'9')f^=(ch=='-'),ch=getchar();
	while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return f?-x:x;
}
const int Maxn=2e5+5,mod=998244353;
int n,k;
int head[Maxn],to[Maxn<<1],nxt[Maxn<<1],cnt1;
inline void add(int u,int v){
	to[++cnt1]=v;nxt[cnt1]=head[u];
	head[u]=cnt1;
}
int f[Maxn];
void dfs(int u,int v){
	f[u]=v;
	for(int i=head[u];i;i=nxt[i]){
		int y=to[i];if(v==y)continue;
		dfs(y,u);
	}
}
int dp[Maxn][405];
inline void mul(int&x,int y){x+=y;if(x>=mod)x-=mod;}
namespace sub2{
	inline void solve(){
		dp[0][0]=1;dfs(1,0);
		for(int i=1;i<=n;i++){
			for(int l=1;l<=i;l++){
				int cnt=0;
				for(int j=l;j<=i;j++)cnt+=(f[j]<l||f[j]>i);
				if(cnt<=1)for(int j=1;j<=k;j++)mul(dp[i][j],dp[l-1][j-1]);
			}
		}
		for(int i=1;i<=k;i++)printf("%d\n",dp[n][i]);
	}
}
namespace sub3{
	int sum[Maxn][405];
	inline void solve(){
		sum[0][0]=dp[0][0]=1;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=k;j++){
				dp[i][j]=sum[i-1][j-1];
				sum[i][j]=sum[i-1][j];
				mul(sum[i][j],dp[i][j]);
			}sum[i][0]=1;
		}
		for(int i=1;i<=k;i++)printf("%d\n",dp[n][i]);
	}
}
signed main(){
	freopen("soft.in","r",stdin);
	freopen("soft.out","w",stdout);
	n=read();k=read();
	int chk3=1;
	for(int i=1;i<n;i++){
		int u=read(),v=read();
		add(u,v);add(v,u);
		chk3&=(v==u+1);
	}
	if(n<=100&&k<=100)sub2::solve(),exit(0);
	if(chk3)sub3::solve(),exit(0);
	return 0;
}

